package com.six.backend.service;


import com.six.backend.pojo.Authority;
import com.six.backend.pojo.Role;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @Author: skyler
 * @Date: 2021/11/7 13:00
 */
public interface RoleService {
    /**
     * 查询角色名称
     * @param account 用户账号
     * @return 角色名称集合
     */
    Set<String> selectRoleNameByAccount(String account);

    /**
     * 查询角色信息
     * @param map {account: 用户账号, roleName: 角色名称}
     * @return List 角色列表
     */
    List<Role> selectRoles(Map map);

    /**
     * 新建角色
     * @param map
     * @return
     */
    Boolean insertRole(Map map);

    /**
     * 判断角色是否存在
     * @param name 角色名称
     * @return Boolean
     */
    Boolean isExist(String name);

    /**
     * 修改角色信息
     * @param role
     * @return Integer
     */
    Boolean updateRole(Role role);

//    /**
//     * 修改角色权限表角色名称
//     * @param roleName
//     * @return
//     */
//    Boolean updateRoleNameInRoleAuthority(String roleName);
//
//    /**
//     * 修改用户角色表角色名称
//     * @param roleName
//     * @return
//     */
//    Boolean updateRoleNameInUserRole(String roleName);

    /**
     * 查询角色第N级权限
     * @param roleName 角色名称
     * @return
     */
    List<Authority> selectPermissionByRoleName(String roleName);

    /**
     * 查询角色其他权限
     * @param roleName 角色名称
     * @return
     */
    List<Authority> selectOtherPermissionByRoleName(String roleName);

//    /**
//     * 删除角色所有权限
//     * @param roleName
//     * @return
//     */
//    Boolean deleteAllPermissionOfRoleName(String roleName);

    /**
     * 为角色添加权限
     * @param roleName 角色名称
     * @param authorityList 权限列表
     * @return
     */
    Boolean insertPermissionOfRoleName(String roleName, List<Authority> authorityList);

    /**
     * 修改角色权限
     * @param roleName
     * @param authorityList
     * @return
     */
    Boolean editPermissionOfRoleName(String roleName, List<Authority> authorityList);

    /**
     * 删除角色
     * @param roleName
     * @return
     */
    Boolean deleteRole(String roleName);

    /**
     * 判断该角色是否被使用
     * @param roleName
     * @return
     */
    Boolean isRoleUsed(String roleName);
}
